//
//  FYUserAccountViewModel.swift
//  Mircore
//
//  Created by apple on 16/8/10.
//  Copyright © 2016年 飞羽. All rights reserved.
//

import UIKit

class FYUserAccountViewModel: NSObject {

    static  let  sharedUserAccount: FYUserAccountViewModel = FYUserAccountViewModel()
    
    
    //用户帐号模型
    
    var  userAccount: CZUserAccount? {
    
      return  CZUserAccount.loadUserAccount()
    
    }
    
    //判断是否登录
    
    var  isLogin: Bool  {
    
     return  accessToken != nil
     }
    
    //封装accessToken 判断逻辑
    var  accessToken: String? {
    
    //判断accessToken是否为nil
        
        guard  let  token  = userAccount?.access_token else  {
        
          return  nil
        }
        
        //如果accsstoken不为nil  判断accesstoken的时间是否过期
        
        let result = userAccount?.expiresDate?.compare(NSDate())
        
        //如果是降序表示accesstoken没有过期
        
        if  result  == NSComparisonResult.OrderedDescending {
        
          return token
        }else  {
        
          return  nil
        }
    
    }
    
    //  通过code获取accesstoken
   func reqeustAccessTokenWithCode(code: String,callBlack:(isSuccess: Bool) -> ()) {
        
        CZNetworkTools.sharedTools.reqeustAccessTokenWithCode(code) { (response, error) -> () in
            if error != nil {
                print("网络请求失败, \(error)")
                callBlack(isSuccess: false)
                return
            }
            
            //  代码执行到此网络请求成功
            
            //  判断服务端给的数据是否是一个正确的字典
            guard let dic = response as? [String: AnyObject] else {
                print("不是一个正确的字典格式")
                callBlack(isSuccess: false)
                return
            }
            //  代码执行到此,字典没有问题
            let userAccount = CZUserAccount(dic: dic)
            print(userAccount.access_token)
            //  请求用户基本信息
            self.requestUserInfo(userAccount,callBlack:callBlack)
            
        }
        }
        
        //  通过accesstoken和uid获取用户信息
     private  func requestUserInfo(userAccount: CZUserAccount,callBlack:(isSuccess: Bool) -> ()) {
        
            CZNetworkTools.sharedTools.requestUserInfo(userAccount) { (response, error) in
                
                if error != nil {
                    print("网络请求失败\(error)")
                    callBlack(isSuccess: false)
                    return
                }
                
                //  代码执行到此网络请求成功
                
                //  判断服务端给的数据是否是一个正确的字典
                guard let dic = response as? [String: AnyObject] else {
                    print("不是一个正确的字典格式")
                    callBlack(isSuccess: false)
                    return
                }
                
                //  代码执行到此,字典没有问题
                
                userAccount.name  = dic["name"] as? String
                
                userAccount.avatar_large  = dic["avatar_large"] as? String
                
                print(userAccount)
                
                userAccount.saveUserAccount()
                //执行成功回调的闭包
                
                callBlack(isSuccess: true)
            }
        }
}
